// 1. 下包
// 2. 导入 Vuex 和 Vue
import Vue from 'vue'
import Vuex from 'vuex'

// 3. 安装 Vuex 插件
Vue.use(Vuex)

// 4.创建 store 对象
const store = new Vuex.Store({
  state: {
    list: JSON.parse(localStorage.getItem('todolist' || [])),
    // [{id: 1,sentence: 'list in index.js',isDone: true}],
    isSel: 'all',
    iCheckedIN: true
  },
  mutations: {
    addList (state, payload) {
      // 增加
      if (payload.sentence == '') {
        return alert('输入为空')
      }
      payload.id =
        state.list.length == 0 ? 1 : state.list[state.list.length - 1].id + 1
      state.list.push({
        id: payload.id,
        sentence: payload.sentence,
        isDone: false
      })
    },
    delList (state, payload) {
      // 单个删除
      let index = state.list.findIndex(item => payload.id === item.id)
      state.list.splice(index, 1)
    },
    changeSel (state, payload) {
      // 筛选
      state.isSel = payload.isSel
    },
    delAllDone (state) {
      // 删除已完成
      state.list = state.list.filter(item => !item.isDone)
    },
    allIWanted (state, payload) {
      state.list.forEach(item => {
        item.isDone = payload.iChecked
      })
      payload.iChecked = !payload.iChecked
      state.iCheckedIN = payload.iChecked
    }
  },
  getters: {
    allDone (state) {
      /* let arr = state.list.filter(item => item.isDone === true)
      console.log(arr)
      if (state.list.length == arr.length) {
        return true
      } else {
        return false
      } */
      return state.list.every(item => item.isDone)
    },
    showList (state) {
      // 根据当前最新的状态来对 list 进行筛选
      // 如果当前是 all 就全部返回
      // 如果当前是 no 就把 isDone 为 false 的数据放到新数组中返回
      if (state.isSel === 'yes') {
        let newArr = []
        // 如果当前 isSel 是 yes 就把 isDone 为 true 的数据放到新数组中返回
        state.list.forEach(item => {
          if (item.isDone) {
            newArr.push(item)
          }
        })

        return newArr
        // filter 以下为 filter 方法
        // filter中包含一个新数组，它会自动遍历数组，并且在这个过程中会将循环过程中符合条件的加入新数组最后返回
        // return state.list.filter(item=>item.isDone)
      } else if (state.isSel === 'no') {
        // 如果当前 isSel 为 no 就把 isDone 为 true 的数据放到新数组中返回
        let newArr = []

        state.list.forEach(item => {
          if (!item.isDone) {
            newArr.push(item)
          }
        })
        return newArr
        // filter 以下为 filter 方法
        // filter中包含一个新数组，它会自动遍历数组，并且在这个过程中会将循环过程中符合条件的加入新数组最后返回
        // return state.list.filter(item=>!item.isDone)
      } else {
        // 如果当前 isSel 为 all 就把整个原数组 list 数据返回

        return state.list
      }
    }
  }
})

//默认导出 store 对象
export default store
